<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Reactivity System</title>
    </head>
    <body>
        <h1>Reactivity System</h1>
        <script>
            const bucket = new Set();

            const data = { text: 'hello world' };

            const obj = new Proxy(data, {
                get(target, key) {
                    bucket.add(effect);
                    return target[key];
                },

                set(target, key, newVal) {
                    target[key] = newVal;
                    bucket.forEach((fn) => fn());
                    return true;
                },
            });

            function effect() {
                document.body.innerHTML = obj.text;
            }

            effect();
        </script>
    </body>
</html>
